草庐IT

C++ 在 std::vector 中搜索

全部标签

c++ - 为什么vector前面没有push/pop?

在C++、STL中,我们有模板类.我们知道它支持O(1)随机访问和尾部修改。我的问题是为什么我们不在中定义push_front或pop_front?一种解释是,如果我们想压入/弹出一个vector前面的元素,我们必须将数组中的每个元素移动一步,这将花费O(n)。.但我认为情况并非总是如此。考虑到如果我们实现使用圆形数组,我们可以实现O(1)从vector的前端和尾部插入/弹出,而不会失去O(1)的能力随机访问。所以我个人想不出任何理由而不是不实现push_front的小开销。/pop_front对于.有什么想法吗? 最佳答案 我们已

c++ - 在 C++ 中,如何使用模板函数作为 std::for_each 中的第三个参数?

我正在尝试使用std::for_each来输出可能包含不同类型的vector的内容。所以我写了一个像这样的通用输出函数:templatevoidoutput(constT&val){cout我想与它一起使用:std::for_each(vec_out.begin(),vec_out.end(),output);但是编译器在for_each语句中提示“无法推断模板参数”。还提示“函数模板不能作为另一个函数模板的参数”。这不可能吗?我原以为编译器会知道vec_o​​ut的类型(它是vector),所以应该实例化函数“output(constdouble&val)”?如果这不起作用,我如何在

c++ - 返回 std::pair 与通过非常量引用传递

为什么返回std::pair或boost::tuple比通过引用返回效率低得多?在我测试过的实际代码中,通过非常量引用而不是通过内部内核中的std::pair设置数据可以将代码速度提高20%。作为实验,我研究了三个最简单的情况,涉及将两个(预定义的)整数与两个整数相加:使用内部内联函数通过引用修改整数使用两个内部的内联函数按值返回整数使用一个内部的内联函数返回一个std::pair,它被复制到结果中。使用g++-c$x-Wall-Wextra-O2-S编译会产生相同的汇编代码,用于按引用传递和按值返回整数:__Z7getPairiRiS_:LFB19:pushq%rbpLCFI0:le

c++ - std::vector 中的重复元素

我有一个std::vector,我想检查其中的所有元素。如果某个元素出现不止一次,我会发出错误信号。我是这样做的:std::vectortest;test.push_back("YES");test.push_back("YES");for(inti=0;i1){DCS_LOG_DEBUG("ERRORWITHCOUNT")}}尽管我知道如何使用std::vector::count()方法进行计数,但这并没有奏效。但我想计算每个元素的数量,而不是计算所有元素……有什么想法吗? 最佳答案 最简单的方法是对vector​​进行std::

c++ - 性能比较:strstr() 与 std::string::find()

有人可以解释为什么我应该使用strstr或stringfind()吗?哪个更快,在哪里? 最佳答案 在C++中你应该使用std::string::find(),在C中你应该使用strstr()。性能差异应该不大。 关于c++-性能比较:strstr()与std::string::find(),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/11799956/

c++ - C++ 中 std::vector 的基本问题

C++教科书和线程,例如these说vector元素在内存中是物理上连续的。但是当我们执行像v.push_back(3.14)这样的操作时,我会假设STL正在使用new运算符来获取更多内存来存储新元素3.14引入到载体中。现在假设大小为4的vector存储在标记为0x7,0x8,0x9,0xA的计算机存储单元中。如果单元格0xB包含一些其他不相关的数据,3.14将如何进入该单元格?这是否意味着单元格0xB将被复制到其他地方,并被删除以为3.14腾出空间? 最佳答案 简短的回答是将保存vector数据的整个数组移动到它有空间增长的位置

c++ - 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 且没有 return 语句的函数不同

#include#includeusingnamespacestd;stringcrash(){}intnoCrash(){}intmain(){crash();//crashes//noCrash();//doesn'tcrashreturn0;}函数crash()在Mingwg++4.6.2中崩溃,函数noCrash()执行时没有问题。为什么没有return语句返回字符串的函数会崩溃? 最佳答案 两者都是未定义的行为,即使是noCrash也会崩溃。 关于c++-返回std::stri

c++ - std::string 一个容器

std::string是标准c++库中的容器类,仅限于容纳char元素吗? 最佳答案 它是std::basic_string的类型定义,实际上。std::basic_string是专门为字符串操作设计的容器类。此容器也可用于宽字符(wchar_t);对于这种情况,它的typedef将是wstring. 关于c++-std::string一个容器,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c++ - memset 导致 std::string 赋值崩溃

我有适用于Windows的代码,但现在我正在移植到MAC,使用Xcode3.2.5C/C++编译器版本GCC4.2,它崩溃了。我已将其缩小为memset调用。如果我注释掉memset它会起作用,如果我把它放回代码中就会崩溃。我的头文件中有一个看起来像这样的结构:typedefstruct{intdeviceCount;struct{#defineMAX_DEVICE_ID256#defineMAX_DEVICE_ENTRIES10std::stringdeviceId;//DevicenametoOpenTransportTypeeTransportType;}deviceNodes[

C++ 指向 vector 的指针

我必须将元素插入到指向vector的指针中。我已经编写了以下代码,但它给出了段错误。有人可以指出此代码中的错误是什么,或者我们如何替代地执行此操作。intmain(){vector*te;te->push_back(10);coutsize() 最佳答案 你永远不会分配vector:vector*te=newvector;此外,您不需要动态分配。更简洁的方法是使用自动存储:intmain(){vectorte;te.push_back(10);cout 关于C++指向vector的指针,